else waypt_add(wpt);
}
+static void
+nmea_release_wpt(waypoint *wpt)
+{
+ if (wpt && ((wpt->Q.next == NULL) || (wpt->Q.next == &wpt->Q))) {
+ /* This waypoint isn't queued.
+ Release it, because we don't have any reference to this
+ waypoint (! memory leak !) */
+ waypt_free(wpt);
+ }
+}
+
static void
nmea_rd_init(const char *fname)
{
if (lngdir == 'W') lngdeg = -lngdeg;
waypt->longitude = ddmm2degrees(lngdeg);
- if (curr_waypt && (read_mode == rm_serial)) {
- waypt_free(curr_waypt);
- }
+ nmea_release_wpt(curr_waypt);
curr_waypt = waypt;
}
break;
}
- if (curr_waypt && (read_mode == rm_serial)) {
- waypt_free(curr_waypt);
- }
+ nmea_release_wpt(curr_waypt);
curr_waypt = waypt;
}
if (lngdir == 'W') lngdeg = -lngdeg;
waypt->longitude = ddmm2degrees(lngdeg);
- if (curr_waypt && (read_mode == rm_serial)) {
- waypt_free(curr_waypt);
- }
+ nmea_release_wpt(curr_waypt);
curr_waypt = waypt;
}